package com.itheima.Zipatream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Demo01 {

    public static void main(String[] args) throws IOException {
        //学习解压缩流
        //功能：负责把压缩包中的文件和文件夹解压出来

        //压缩包的存储位置
        File src = new File("E:\\ZipUse\\mySQLData.zip");
        //创建一个file表示解压的目的地
        File dest = new File("E:\\Zipuseindex");

        //定义一个方法，解压本质：将压缩包的文件或者文件夹读取以后按照层级都复制拷贝一份到目的地
        unzip(src,dest);
    }
    public static void unzip(File src,File dest) throws IOException
    {
        //定义解压缩流
        ZipInputStream zip = new ZipInputStream(new FileInputStream(src));

        //获取压缩包中的每一个对象
        ZipEntry entry;
        while ((entry=zip.getNextEntry())!=null)
        {
            System.out.println(entry);//打印当前获取的对象路径
            //判断当前对象是文件还是文件夹
            if(entry.isDirectory())//如果是文件夹，在目的地文件夹中创建新文件夹
            {
                File fis = new File(dest, entry.toString());
                fis.mkdirs();
            }
            else
            {
                //如果是文件，需要读取文件中的数据
                FileOutputStream fos = new FileOutputStream(new File(dest, entry.toString()));
                int b;
                while((b=zip.read())!=-1)
                {
                    fos.write(b);
                }
                fos.close();
                zip.closeEntry();//当前对象使用完就关闭
            }
        }
        zip.close();
    }
}
